﻿function showUserList() {
	if (refreshTab('showUserList')) return;
	var pageSize = 30;

	var store = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : url.getUserList
						}),
				reader : new Ext.data.JsonReader({
							root : 'result',
							totalProperty : 'total',
							id : 'username'
						}, ['username', 'nickname', 'email', 'sid', 'school', 'sex', 'birthday',
								'publicPersonalInfo', 'disabled', 'admin'])
			});
	store.load({
				params : {
					start : 0,
					limit : pageSize
				}
			});

	var cm = new Ext.grid.ColumnModel([{
				header : '用户名',
				sortable : false,
				dataIndex : 'username',
				renderer : sys.rd.username
			}, {
				header : '昵称',
				sortable : false,
				dataIndex : 'nickname'
			}, {
				header : 'Email',
				sortable : false,
				dataIndex : 'email',
				width : 150
			}, {
				header : '学号',
				sortable : false,
				dataIndex : 'sid'
			}, {
				header : '学校',
				sortable : false,
				dataIndex : 'school'
			}, {
				header : '性别',
				sortable : false,
				dataIndex : 'sex',
				renderer : sys.rd.sex
			}, {
				header : '生日',
				sortable : false,
				dataIndex : 'birthday'
			}, {
				header : '公开个人信息',
				sortable : false,
				dataIndex : 'publicPersonalInfo',
				renderer : sys.rd.yesno
			}, {
				header : '禁用',
				sortable : false,
				dataIndex : 'disabled',
				renderer : sys.rd.yesno
			}, {
				header : '管理员',
				sortable : false,
				dataIndex : 'admin',
				renderer : sys.rd.yesno
			}]);

	var sm = new Ext.grid.RowSelectionModel({
				singleSelect : true
			});
	sm.on('selectionchange', onselect);

	var toolbar = new Ext.Toolbar({
				items : [new Ext.Button({
									text : '注册新用户',
									iconCls : 'reg-icon',
									handler : function() {
										showReg({
													success : onRefresh
												});
									}
								}), new Ext.Toolbar.Separator(), new Ext.Button({
									text : '修改资料',
									iconCls : 'editinfo-icon',
									disabled : true,
									handler : onedit
								}), new Ext.Button({
									text : '修改密码',
									iconCls : 'password-icon',
									disabled : true,
									handler : onpsw
								}), new Ext.Button({
									text : '删除用户',
									iconCls : 'delete-icon',
									disabled : true,
									handler : ondel
								}), new Ext.Toolbar.Separator(), new Ext.Button({
									text : '设禁用',
									iconCls : 'disable-icon',
									disabled : true,
									handler : ondisa
								}), new Ext.Button({
									text : '设管理员',
									iconCls : 'admin-icon',
									disabled : true,
									handler : onadmin
								}), new Ext.Toolbar.Separator(), new Ext.Button({
									text : '发送消息',
									iconCls : 'replymail-icon',
									disabled : true,
									handler : onsend
								})]
			});

	var pagebar = new Ext.PagingToolbar({
				pageSize : pageSize,
				store : store,
				displayInfo : true,
				emptyMsg : '当前没有用户。',
				displayMsg : '当前显示倒数第 {0} - {1} 位用户，共 {2} 位用户。',
				plugins : new Ext.ux.SlidingPager()
			});

	var grid = new Ext.grid.GridPanel({
				id : 'showUserList',
				title : '用户列表',
				iconCls : 'userlist-icon',
				closable : true,
				region : 'center',
				loadMask : {
					msg : '载入中...'
				},
				viewConfig : {
					forceFit : true
				},
				store : store,
				cm : cm,
				sm : sm,
				tbar : toolbar,
				bbar : pagebar
			});
	grid.on('rowdblclick', ondblclick);
	grid.onRefresh = onRefresh;
	addTab(grid);

	function onRefresh() {
		store.reload();
	}
	function getSelect() {
		if (sm.getCount() == 0) return null;
		return sm.getSelected();
	}
	function onedit() {
		var select = getSelect();
		if (!select) return;
		editUser(select.data.username);
	}
	function onpsw() {
		var select = getSelect();
		if (!select) return;
		editPassword(select.data.username);
	}
	function ondel() {
		var select = getSelect();
		if (!select) return;
		deleteUser({
					username : select.data.username,
					success : onRefresh
				});
	}
	function ondisa() {
		var select = getSelect();
		if (!select) return;
		setUserDisabled({
					username : select.data.username,
					disabled : !select.data.disabled,
					success : onRefresh
				});
	}
	function onadmin() {
		var select = getSelect();
		if (!select) return;
		confirmPassword(function(psw) {
					setUserAdmin({
								username : select.data.username,
								admin : !select.data.admin,
								myPassword : psw,
								success : onRefresh
							});
				});
	}
	function onsend() {
		var select = getSelect();
		if (!select) return;
		sendMsg(select.data.username);
	}
	function onselect(s) {
		var sel = getSelect();
		toolbar.get(2).setDisabled(!sel);
		toolbar.get(3).setDisabled(!sel);
		toolbar.get(4).setDisabled(!sel);
		toolbar.get(6).setDisabled(!sel);
		toolbar.get(7).setDisabled(!sel);
		toolbar.get(9).setDisabled(!sel);

		if (sel) {
			toolbar.get(6).setText(sel.data.disabled ? '设启用' : '设禁用');
			toolbar.get(7).setText(sel.data.admin ? '设回屁民' : '设管理员');
		}
	}
	function ondblclick() {
		var record = getSelect();
		if (!record) return;
		showUser(record.data.username);
	}
}

function deleteUser(obj) {
	obj = defaultx(obj, 'username');
	confirmx('您确定要删除用户 [' + obj.username + '] 吗？', function() {
				ajax({
							url : url.deleteUser,
							params : {
								username : obj.username
							},
							success : obj.success
						});
			});
}

function setUserDisabled(obj) {
	confirmx('您确定要' + (obj.disabled ? '启用' : '禁用') + '用户 [' + obj.username + '] 吗？', function() {
				ajax({
							url : url.setUserDisabled,
							params : {
								username : obj.username,
								disabled : obj.disabled
							},
							success : obj.success
						});
			});
}

function setUserAdmin(obj) {
	ajax({
				url : url.setUserAdmin,
				params : {
					username : obj.username,
					admin : obj.admin,
					myPassword : obj.myPassword
				},
				success : obj.success
			});
}
